package fr.esgi.utils;

import java.util.ArrayList;
import java.util.Collections;

import fr.esgi.classes.Groupe;
import fr.esgi.classes.Personne;

public class GroupeAleatoire {

	public ArrayList<Groupe>aleatoire(int n, ArrayList<Personne>tabEtudiant){
		Collections.shuffle(tabEtudiant);
		int cpt=0;
		int cptGroupe = 1;

		ArrayList<Groupe>equipes = new ArrayList<Groupe>();
		if(tabEtudiant.size()<n){
			Groupe g=new Groupe(cptGroupe);
			while(cpt<tabEtudiant.size()){	
				g.getTabEtudiant().add(tabEtudiant.get(cpt));
				cpt++;	
			}
			equipes.add(g);
		}
		else if(tabEtudiant.size()%n==0){
			while(cpt<tabEtudiant.size()){	
				Groupe g=new Groupe(cptGroupe);
				for(int j=0;j<n;j++){
					g.getTabEtudiant().add(tabEtudiant.get(cpt));
					cpt++;
				}
				cptGroupe++;
				equipes.add(g);
			}

		}
		else if(tabEtudiant.size()%n==1){

			while(cpt<tabEtudiant.size()){	
				Groupe g=new Groupe(cptGroupe);
				if (cpt==0){
					g.getTabEtudiant().add(tabEtudiant.get(cpt));
					cpt++;
				}
				for(int j=0;j<n;j++){				
					g.getTabEtudiant().add(tabEtudiant.get(cpt));
					cpt++;
				}
				cptGroupe++;
				equipes.add(g);
			}
		}else if(tabEtudiant.size()%n==2){
			if(tabEtudiant.size()<2*n)
			{
				Groupe g=new Groupe();
				String s="des groupes de ";
				ArrayList<Integer> tab=new ArrayList<Integer>();
				tab=pgcd(tabEtudiant.size());
				for(int i=0;i<tab.size();i++){
					s=s+String.valueOf(tab.get(i))+", ";
				}
				g.setDiviseurs(s);
				equipes.add(g);
				System.out.println(s+"seraient plus judicieux pour le projet");

			}
			else{
				while(cpt<tabEtudiant.size()){	
					Groupe g=new Groupe(cptGroupe);

					if (cpt==0||cpt==n+1){
						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					for(int j=0;j<n;j++){	
						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					cptGroupe++;
					equipes.add(g);
				}
			}
		}else if(tabEtudiant.size()%n==3){
			if(tabEtudiant.size()<3*n)
			{
				Groupe g=new Groupe();
				String s="des groupes de ";
				ArrayList<Integer> tab=new ArrayList<Integer>();
				tab=pgcd(tabEtudiant.size());
				for(int i=0;i<tab.size();i++){
					s=s+String.valueOf(tab.get(i))+", ";
				}
				g.setDiviseurs(s);
				equipes.add(g);
				System.out.println(s+"seraient plus judicieux pour le projet");
			}
			else{

				while(cpt<tabEtudiant.size()){	
					Groupe g=new Groupe(cptGroupe);
					if (cpt==0||cpt==n+1||cpt==2*n+2){
						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					for(int j=0;j<n;j++){	

						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					cptGroupe++;
					equipes.add(g);
				}
			}
		}else if(tabEtudiant.size()%n==4){
			if(tabEtudiant.size()<4*n)
			{
				Groupe g=new Groupe();
				String s="des groupes de ";
				ArrayList<Integer> tab=new ArrayList<Integer>();
				tab=pgcd(tabEtudiant.size());
				for(int i=0;i<tab.size();i++){
					s=s+String.valueOf(tab.get(i))+", ";
				}
				g.setDiviseurs(s);
				equipes.add(g);
				System.out.println(s+"seraient plus judicieux pour le projet");
			}
			else{

				while(cpt<tabEtudiant.size()){	
					Groupe g=new Groupe(cptGroupe);
					if(cpt==0||cpt==n+1||cpt==2*n+2||cpt==3*n+3){
						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					for(int j=0;j<n;j++){	

						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					cptGroupe++;
					equipes.add(g);
				}
			}
		}
		else if(tabEtudiant.size()%n==5){
			if(tabEtudiant.size()<5*n)
			{
				Groupe g=new Groupe();
				String s="des groupes de ";
				ArrayList<Integer> tab=new ArrayList<Integer>();
				tab=pgcd(tabEtudiant.size());
				for(int i=0;i<tab.size();i++){
					s=s+String.valueOf(tab.get(i))+", ";
				}
				g.setDiviseurs(s);
				equipes.add(g);
				System.out.println(s+"seraient plus judicieux pour le projet");
			}
			else{

				while(cpt<tabEtudiant.size()){	
					Groupe g=new Groupe(cptGroupe);
					if(cpt==0||cpt==n+1||cpt==2*n+2||cpt==3*n+3||cpt==4*n+4){
						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					for(int j=0;j<n;j++){	

						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					cptGroupe++;
					equipes.add(g);
				}
			}
		}
		else if(tabEtudiant.size()%n==6){
			if(tabEtudiant.size()<6*n)
			{
				Groupe g=new Groupe();
				String s="des groupes de ";
				ArrayList<Integer> tab=new ArrayList<Integer>();
				tab=pgcd(tabEtudiant.size());
				for(int i=0;i<tab.size();i++){
					s=s+String.valueOf(tab.get(i))+", ";
				}
				g.setDiviseurs(s);
				equipes.add(g);
				System.out.println(s+"seraient plus judicieux pour le projet");
			}
			else{

				while(cpt<tabEtudiant.size()){	
					Groupe g=new Groupe(cptGroupe);
					if(cpt==0||cpt==n+1||cpt==2*n+2||cpt==3*n+3||cpt==4*n+4||cpt==5*n+5){
						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					for(int j=0;j<n;j++){	

						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					cptGroupe++;
					equipes.add(g);
				}
			}
		}
		else if(tabEtudiant.size()%n==7){
			if(tabEtudiant.size()<7*n)
			{
				Groupe g=new Groupe();
				String s="des groupes de ";
				ArrayList<Integer> tab=new ArrayList<Integer>();
				tab=pgcd(tabEtudiant.size());
				for(int i=0;i<tab.size();i++){
					s=s+String.valueOf(tab.get(i))+", ";
				}
				g.setDiviseurs(s);
				equipes.add(g);
				System.out.println(s+"seraient plus judicieux pour le projet");
			}
			else{

				while(cpt<tabEtudiant.size()){	
					Groupe g=new Groupe(cptGroupe);
					if(cpt==0||cpt==n+1||cpt==2*n+2||cpt==3*n+3||cpt==4*n+4||cpt==5*n+5||cpt==6*+6){
						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					for(int j=0;j<n;j++){	

						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					cptGroupe++;
					equipes.add(g);
				}
			}
		}else if(tabEtudiant.size()%n==8){
			if(tabEtudiant.size()<8*n)
			{
				Groupe g=new Groupe();
				String s="des groupes de ";
				ArrayList<Integer> tab=new ArrayList<Integer>();
				tab=pgcd(tabEtudiant.size());
				for(int i=0;i<tab.size();i++){
					s=s+String.valueOf(tab.get(i))+", ";
				}
				g.setDiviseurs(s);
				equipes.add(g);
				System.out.println(s+"seraient plus judicieux pour le projet");
			}
			else{

				while(cpt<tabEtudiant.size()){	
					Groupe g=new Groupe(cptGroupe);
					if(cpt==0||cpt==n+1||cpt==2*n+2||cpt==3*n+3||cpt==4*n+4||cpt==5*n+5||cpt==6*+6||cpt==7*+7){
						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					for(int j=0;j<n;j++){	

						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					cptGroupe++;
					equipes.add(g);
				}
			}
		}else if(tabEtudiant.size()%n==9){
			if(tabEtudiant.size()<9*n)
			{
				Groupe g=new Groupe();
				String s="des groupes de ";
				ArrayList<Integer> tab=new ArrayList<Integer>();
				tab=pgcd(tabEtudiant.size());
				for(int i=0;i<tab.size();i++){
					s=s+String.valueOf(tab.get(i))+", ";
				}
				g.setDiviseurs(s);
				equipes.add(g);
				System.out.println(s+"seraient plus judicieux pour le projet");
			}
			else{

				while(cpt<tabEtudiant.size()){	
					Groupe g=new Groupe(cptGroupe);
					if(cpt==0||cpt==n+1||cpt==2*n+2||cpt==3*n+3||cpt==4*n+4||cpt==5*n+5||cpt==6*+6||cpt==7*+7||cpt==8*+8){
						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					for(int j=0;j<n;j++){	

						g.getTabEtudiant().add(tabEtudiant.get(cpt));
						cpt++;
					}
					cptGroupe++;
					equipes.add(g);
				}
			}
		}
		return equipes;
	}
	public int factoriel(int n){
		int factoriel=1;
		for(int i=1;i<=n;i++){
			factoriel=factoriel*i;
		}
		return factoriel;

	}
	public ArrayList<Integer>pgcd(int n){

		ArrayList<Integer>tab = new ArrayList<Integer>();
		for(int i=2;i<=10;i++){
			if((n%i)==0||(n%i)==1)
			{
				tab.add(i);
			}
		}
		return tab;

	}

}
